AWS Resource Explorerを使用して組織内のマネージドインスタンスとアンマネージドインスタンスを確認する方法

AWS Resource Explorerを使用して組織内のマネージドインスタンスとアンマネージドインスタンスを確認する方法

Clock Icon2025.01.08

はじめに

AWS Resource Explorerを使用して、組織内のマネージドインスタンスとアンマネージドインスタンスを確認する方法をご紹介します。

事前に、以下のいずれかの方法でAWS Resource Explorerのマルチアカウントビューを設定しておく必要があります。

https://dev.classmethod.jp/articles/aws-resource-explorer-multi-account-region-restriction/

https://dev.classmethod.jp/articles/aws-resource-explorer-multi-account-view/

マネージドインスタンスのみを確認

マルチアカウントビューでフィルタリング条件として「リソースタイプ = ec2:instance」を設定することで、組織内に存在するすべてのEC2インスタンスを確認できます。

cm-hirai-screenshot 2024-12-23 16.37.35

Resource Explorerのリソースタイプには、SSM関連のリソースタイプとしてマネージドインスタンスが含まれています。
そのため、フィルタリング条件に「リソースタイプ = ssm:managed-instance」を設定することで、組織内に存在するすべてのマネージドインスタンスを確認できます。

cm-hirai-screenshot 2024-12-23 16.37.11

https://docs.aws.amazon.com/resource-explorer/latest/userguide/supported-resource-types.html?icmpid=docs_console_unmapped

アンマネージドインスタンスを確認

Resource Explorerのリソースタイプには、アンマネージドインスタンスは存在しません。

リソースタイプ「ec2:instance」の検索結果と「ssm:managed-instance」の検索結果の差分を抽出するコマンドを実行することで、アンマネージドインスタンスを特定できます。

AWS CLIにはResource Explorerのsearchコマンドが用意されているため、これを使用します。

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/resource-explorer-2/search.html

AWS CloudShellで以下のコマンド実行すると、アンマネージドインスタンスのみが確認できます。

$ aws resource-explorer-2 search \
  --query-string "resourceType:ec2:instance" \
  --output json \
  --query "Resources[*].Arn" | \
jq \
  --argjson managed "$(aws resource-explorer-2 search \
    --query-string "resourceType:ssm:managed-instance" \
    --output json \
    --query "Resources[*].Arn" | \
    jq '[.[] | 
      capture("arn:aws:ssm:(?<region>[^:]+):(?<account>[^:]+):managed-instance/(?<id>.*)") | 
      "arn:aws:ec2:\(.region):\(.account):instance/\(.id)"]'
    )" \
  '[.[] | select(. as $i | $managed | index($i) | not)]'
~出力結果~
Unmanaged instances:
[
  "arn:aws:ec2:ap-northeast-1:111111111111:instance/i-09bcec76bd96cef02",
  "arn:aws:ec2:ap-northeast-1:222222222222:instance/i-0dc988f38aa48a2f6"
]

アンマネージドインスタンスとマネージドインスタンスの両方を出力するコマンドは、以下の通りです。

$ echo "Managed instances:" && \
aws resource-explorer-2 search \
  --query-string "resourceType:ec2:instance" \
  --output json \
  --query "Resources[*].Arn" | \
jq \
  --argjson managed "$(aws resource-explorer-2 search \
    --query-string "resourceType:ssm:managed-instance" \
    --output json \
    --query "Resources[*].Arn" | \
    jq '[.[] | 
      capture("arn:aws:ssm:(?<region>[^:]+):(?<account>[^:]+):managed-instance/(?<id>.*)") | 
      "arn:aws:ec2:\(.region):\(.account):instance/\(.id)"]'
    )" \
  '[.[] | select(. as $i | $managed | index($i))]' && \
echo "Unmanaged instances:" && \
aws resource-explorer-2 search \
  --query-string "resourceType:ec2:instance" \
  --output json \
  --query "Resources[*].Arn" | \
jq \
  --argjson managed "$(aws resource-explorer-2 search \
    --query-string "resourceType:ssm:managed-instance" \
    --output json \
    --query "Resources[*].Arn" | \
    jq '[.[] | 
      capture("arn:aws:ssm:(?<region>[^:]+):(?<account>[^:]+):managed-instance/(?<id>.*)") | 
      "arn:aws:ec2:\(.region):\(.account):instance/\(.id)"]'
    )" \
  '[.[] | select(. as $i | $managed | index($i) | not)]'
~出力結果~
Managed instances:
[
  "arn:aws:ec2:ap-northeast-1:333333333333:instance/i-0909858d2b9575417"
]
Unmanaged instances:
[
  "arn:aws:ec2:ap-northeast-1:111111111111:instance/i-09bcec76bd96cef02",
  "arn:aws:ec2:ap-northeast-1:222222222222:instance/i-0dc988f38aa48a2f6"
]

今回はResource Explorerを使用しましたが、Systems Manager統合コンソールを利用する方法もあります。

https://dev.classmethod.jp/articles/aws-ssm-new-experience-is-very-good/

https://aws.amazon.com/jp/about-aws/whats-new/2024/11/aws-systems-manager-experience-simplifying-node-management/

ただし、Systems Manager統合コンソールのセットアップで使用するSSM高速セットアップは大阪リージョンに対応していないため、今回は採用しませんでした。

アンマネージドインスタンスも一覧で確認できる以外にも機能が豊富ですので、大阪リージョンで利用できない場合でも問題がなければ、利用候補として検討できます。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.